package com.example.dbcms.controller.admin;

import com.example.dbcms.annotation.Log;
import com.example.dbcms.domain.Role;
import com.example.dbcms.service.RoleService;
import com.example.dbcms.utils.ResultVoUtil;
import com.example.dbcms.vo.ResultVo;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 角色管理
 */
@Controller
@RequestMapping("/admin/role")
@Api("角色信息管理")
public class RoleController {

    @Autowired
    private RoleService roleService;

    /**
     * 跳转到角色管理页面
     * @return
     */
    @GetMapping("/")
    @ApiOperation("跳转到角色管理页面")
    @Log(type="跳转到角色管理页面")
    public String roleList(Role role, ModelMap modelMap){
        PageInfo<Role> rolePageInfo = roleService.selectAllRole(role);
        modelMap.put("roleList",rolePageInfo.getList());
        modelMap.put("role",role);
        modelMap.put("pageInfo",rolePageInfo);
        return "admin/role/index";
    }

    /**
     * 跳转到新增角色页面
     * @return
     */
    @ApiOperation("跳转到新增角色页面")
    @GetMapping("/addRole")
    @Log(type="跳转到新增角色页面")
    public String addRole(){
        return "admin/role/add";
    }

    /**
     * 新增角色信息到数据库
     * @param role
     * @return
     */
    @PostMapping("/addRole")
    @ResponseBody
    @ApiOperation("新增角色信息到数据库")
    @Log(type="新增角色信息到数据库")
    public ResultVo addRoleToDb(Role role){
        int result = roleService.addRole(role);
        if(result==1){
            return ResultVoUtil.success("添加成功");
        }
        return ResultVoUtil.error("添加失败");
    }

    /**
     * 删除一个角色
     * @param id
     * @return
     */
    @GetMapping("/deleteRole/{id}")
    @ApiOperation("删除一个角色")
    @ResponseBody
    @Log(type="删除一个角色")
    public ResultVo deleteRole(@PathVariable("id") int id){
        int result = roleService.deleteRole(id);
        return result==1?ResultVoUtil.success("删除成功"):ResultVoUtil.error("删除失败");
    }

    /**
     * 删除多条角色数据
     * @param ids
     * @return
     */
    @PostMapping("/deleteMultiple")
    @ResponseBody
    @ApiOperation("删除多条角色数据")
    @Log(type="删除多条角色数据")
    public ResultVo deleteMultipleRole(@RequestParam(value = "ids") List<Integer> ids){
        int result = roleService.deleteMultipleRole(ids);
        return result== ids.size()?ResultVoUtil.success("删除成功"):ResultVoUtil.error("删除失败");
    }

    /**
     * 跳转到详细角色页面
     * @param id
     * @param modelMap
     * @return
     */
    @ApiOperation("跳转到详细角色页面")
    @GetMapping("/detailRole/{id}")
    @Log(type="跳转到详细角色页面")
    public String detailRole(@PathVariable("id") int id,ModelMap modelMap){
        modelMap.put("role",roleService.getRoleById(id));
        return "admin/role/detail";
    }

    /**
     * 跳转到编辑角色页面
     * @param id
     * @param modelMap
     * @return
     */
    @GetMapping("/editRole/{id}")
    @ApiOperation("跳转到编辑角色页面")
    @Log(type="跳转到编辑角色页面")
    public String editRole(@PathVariable("id") int id,ModelMap modelMap){
        modelMap.put("role",roleService.getRoleById(id));
        return "admin/role/edit";
    }

    /**
     * 修改角色信息
     * @param role
     * @return
     */
    @PostMapping("/editRole")
    @ResponseBody
    @ApiOperation("修改角色信息")
    @Log(type="修改角色信息")
    public ResultVo saveRole(Role role){
        int result = roleService.updateRole(role);
        return result==1?ResultVoUtil.success("修改成功"):ResultVoUtil.error("修改失败");
    }
}
